package org.example.autofilearchiver.Web.ServiceImpl;

import io.swagger.models.auth.In;
import io.swagger.v3.oas.annotations.servers.Server;
import org.example.autofilearchiver.tool.DOCX.DocxTool;
import org.example.autofilearchiver.tool.StaticClass.DOCX.DocxStatic;
import org.example.autofilearchiver.tool.StaticClass.PDf.PDFStatic;
import org.example.autofilearchiver.tool.String.StringTool;
import org.example.autofilearchiver.tool.fileTool.FileUtils;
import org.example.autofilearchiver.toolclass.DOCX.DocxFile;
import org.example.autofilearchiver.toolclass.DOCX.DocxFileTemplate;
import org.example.autofilearchiver.toolclass.ELSE.FindDataWithStringAndNumberObject;
import org.example.autofilearchiver.toolclass.PDF.PDFFile;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class DocxProcessServiceImpl {
    /**
     * 把docx的路径存到全局，生成对象
     */
    public static void initDocxFiles() {
        //把docx的路径存到全局
        String docxPath = DocxStatic.docxPath;
        //判断路径是文件还是文件还是文件夹,文件夹的话需要读取文件夹的所有文件,文件直接存,存到全局
        boolean directory = FileUtils.isDirectory(docxPath);
        DocxStatic.docxFilePaths = new ArrayList<String>();
        if (directory) {
            List<String> allFilePaths = FileUtils.getAllFilePaths(docxPath);
            DocxStatic.docxFilePaths.addAll(allFilePaths);
        } else {
            DocxStatic.docxFilePaths.add(docxPath);
        }
        //已经获取到所有的pdf和docx的路径
        //创建所有的docx对象,存到全局
        DocxStatic.docxObjects = new ArrayList<>();
        for (String filePath : DocxStatic.docxFilePaths) {
            DocxFile docxFile = new DocxFile();
            docxFile.setAllText(StringTool.removeEmptyOrBlankStrings(DocxTool.readDocxFile(filePath)));
            docxFile.setDocxPath(filePath);
            DocxStatic.docxObjects.add(docxFile);
        }

    }

    /**
     * 给所有的docx对象加上正确的模板集合
     */
    public static void joinAllDocxTemplates() {
        List<DocxFile> docxObjects = DocxStatic.docxObjects;
        List<DocxFileTemplate> docxTemplates = DocxStatic.docxFileTemplates;
        //获取到所有的docx对象，为每个对象得到模板集合（新建相同模板，不是前端传入的模板）
        for (int j = 0; j < docxObjects.size(); j++) {
            DocxFile docxFile = docxObjects.get(j);
            docxFile.setDocxFileTemplates(new ArrayList<>());
            //进行标识数据匹配，得到所有的text，text遍历，包含标识数据，加一个template
            List<String> allText = docxFile.getAllText();
            boolean isGetTemplate = false;
            for (int i = 0; i < allText.size(); i++) {
                String text = allText.get(i);
                for (int i1 = 0; i1 < docxTemplates.size(); i1++) {
                    if (isGetTemplate) {
                        break;
                    }
                    DocxFileTemplate docxFileTemplate = docxTemplates.get(i1);
                    List<String> identifiers = docxFileTemplate.getIdentifiers();
                    for (int i2 = 0; i2 < identifiers.size(); i2++) {
                        String identifier = identifiers.get(i2);
                        if (text.contains(identifier)) {
                            docxFile.getDocxFileTemplates().add(new DocxFileTemplate(docxFileTemplate.getId(), docxFileTemplate.getName(), docxFileTemplate.getIdentifiers(), docxFileTemplate.getFindDataWithStringAndNumberObjects(), docxFileTemplate.getArchivePath()));
                            isGetTemplate = true;
                            break;
                        }
                    }

                }
                isGetTemplate = false;
            }
        }


    }

    /**
     * 整体获得docx所有templates，集合每一个template的tags和increments，组成两个大的List<String>,再根据每个template的tags大小，切割List<String>，存到每个pdf里
     */
//    public static void docxGetStringByTags() {
//        // 整体获得docx所有templates，集合每一个template的tags和increments，组成两个大的List<String>
//        List<DocxFile> docxObjects = DocxStatic.docxObjects;
//        List<DocxFileTemplate> docxTemplates = new ArrayList<>();
//        docxObjects.forEach(docxFile -> {
//            docxFile.getPdfFiles().forEach(pdfFile -> {
//                docxTemplates.add(pdfFile.getDocxFileTemplate());// 获取到所有的templates
//            });
//        });
//        List<String> tags = new ArrayList<>();
//        List<Integer> increments = new ArrayList<>();
//        docxTemplates.forEach(docxFileTemplate -> {
//            // 获取到该template的tags和increments
//            List<String> docxFileTemplateTags = new ArrayList<>();
//            List<Integer> docxFileTemplateIncrements = new ArrayList<>();
//            List<FindDataWithStringAndNumberObject> renameObj = docxFileTemplate.getFindDataWithStringAndNumberObjects();
//            for (FindDataWithStringAndNumberObject findDataWithStringAndNumberObject : renameObj) {
//                docxFileTemplateTags.add(findDataWithStringAndNumberObject.getTag());
//                docxFileTemplateIncrements.add(findDataWithStringAndNumberObject.getAddIndex());
//
//            }
//            // 加到总tags和increments
//            tags.addAll(docxFileTemplateTags);
//            increments.addAll(docxFileTemplateIncrements);
//        });
//        // 每个docx对象得到所有的usefulTags
//        docxObjects.forEach(docxFile -> {
//            List<String> usefulTags = DocxTool.matchTagsReturnUsefulTags(docxFile.getAllText(), tags, increments);
//            // 根据每个template的tags大小，切割List<String>，存到每个pdf里
//            List<Integer> sizes = new ArrayList<>();
//            docxFile.getDocxFileTemplates().forEach(docxFileTemplate -> {
//                sizes.add(docxFileTemplate.getFindDataWithStringAndNumberObjects().size());
//            });
//            int currentIndex = 0; // 当前索引
//            int pdfIndex = 0;
//            List<PDFFile> pdfFiles = docxFile.getPdfFiles();
//            for (int size : sizes) {
//                // 计算结束索引，确保不会越界
//                int endIndex = Math.min(currentIndex + size, usefulTags.size());
//                // 提取子列表
//                List<String> chunk = usefulTags.subList(currentIndex, endIndex);
//                // 对子列表进行操作,放到pdf对象里
//                pdfFiles.get(0).setUsefulTags(chunk);
//
//                // 更新当前索引
//                currentIndex = endIndex;
//                pdfIndex++;
//            }
//        });
//
//
//    }

}
